<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding:0;
        }
        #canvas{
            border: 1px solid #ccc;
            box-shadow: 1px 1px 3px #000; 
        }
    </style>
</head>
<body>
    <!-- canvas本身是个画布 用途就是让我们可以在画布上用JS绘制图形 -->
    <canvas id='canvas' width="1000px" height='600px'></canvas>
</body>
</html>
<script>
    //我们要在canvas上绘制图形， 首先需要获取canvas
    let canvas = document.getElementById('canvas');

    // 使用JS在画布上绘图 还需要创造一个绘图的环境
    let ctx = canvas.getContext('2d');

    //我们可以看到 每次的移动都会产生很多的小球；那么我们怎么去绘制一个小球呢？

    //首先 我们去画一个圆；
    //在canvas上绘图，首先要新建一个路径；我们要用到beginPath这个函数；
    ctx.beginPath();

    // canvas 上 定义一个圆 我们要用到 arc这个函数
    // 这个函数 需要5到6个参数 ctx.arc(x,y,r,0,2*Math.PI,[true])
    // 这五个参数分别代表圆心的x轴坐标 y轴坐标 半径  起始角度 结束角度 顺时针或逆时针
    ctx.arc(200,200,50,0,2*Math.PI);

    //上边只是定义一个路径；下边仍然需要我们把这个路径画到画布上
    // ctx.strokeStyle = 'red' //设置 画线的颜色
    // ctx.lineWidth = 15;//这只 画线的宽度
    // ctx.stroke();// 把线画到画布上
    ctx.fillStyle = 'red';
    ctx.fill();

    //在鼠标滑过时 产生新的小球；新的小球王不同的方向扩散
    var ary = []; // 用来存放新产生的小球
    function Circle(x,y,r) {
        this.x = x;
        this.y = y;
        this.r = r;
        this.dx = Math.random()*10 -5;
        this.dy = Math.random()*10 - 5;
        this.color = `rgb(${Math.floor(Math.random()*249)},${Math.floor(Math.random()*249)},200)`;
        ary.push(this);
    }
    Circle.prototype.render = function () {
        ctx.beginPath();
        ctx.arc(this.x,this.y,this.r,0,2*Math.PI);
        ctx.fillStyle = this.color;
        ctx.fill();
    }
    Circle.prototype.update = function () {
        this.x += this.dx;
        this.y += this.dy;
        this.r--;
        if(this.r < 0){
            ary = ary.filter((item)=>{
                return item != this
            })
            return false
        }
        return true;
    }
    canvas.onmousemove = function (e) {
        new Circle(e.clientX,e.clientY,30)
    }
    setInterval(()=>{
        ctx.clearRect(0,0,1000,600);
        ary.forEach((item)=>{
            item.update() && item.render();
        })
    },10)



    
</script>